function md5(str) {
  //  discuss at: http://phpjs.org/functions/md5/
  // original by: Webtoolkit.info (http://www.webtoolkit.info/)
  // improved by: Michael White (http://getsprink.com)
  // improved by: Jack
  // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  //    input by: Brett Zamir (http://brett-zamir.me)
  // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  //  depends on: utf8_encode
  //   example 1: md5('Kevin van Zonneveld');
  //   returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'

  var xl;

  var rotateLeft = function(lValue, iShiftBits) {
    return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
  };

  var addUnsigned = function(lX, lY) {
    var lX4, lY4, lX8, lY8, lResult;
    lX8 = (lX & 0x80000000);
    lY8 = (lY & 0x80000000);
    lX4 = (lX & 0x40000000);
    lY4 = (lY & 0x40000000);
    lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
    if (lX4 & lY4) {
      return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
    }
    if (lX4 | lY4) {
      if (lResult & 0x40000000) {
        return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
      } else {
        return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
      }
    } else {
      return (lResult ^ lX8 ^ lY8);
    }
  };

  var _F = function(x, y, z) {
    return (x & y) | ((~x) & z);
  };
  var _G = function(x, y, z) {
    return (x & z) | (y & (~z));
  };
  var _H = function(x, y, z) {
    return (x ^ y ^ z);
  };
  var _I = function(x, y, z) {
    return (y ^ (x | (~z)));
  };

  var _FF = function(a, b, c, d, x, s, ac) {
    a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
    return addUnsigned(rotateLeft(a, s), b);
  };

  var _GG = function(a, b, c, d, x, s, ac) {
    a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
    return addUnsigned(rotateLeft(a, s), b);
  };

  var _HH = function(a, b, c, d, x, s, ac) {
    a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
    return addUnsigned(rotateLeft(a, s), b);
  };

  var _II = function(a, b, c, d, x, s, ac) {
    a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
    return addUnsigned(rotateLeft(a, s), b);
  };

  var convertToWordArray = function(str) {
    var lWordCount;
    var lMessageLength = str.length;
    var lNumberOfWords_temp1 = lMessageLength + 8;
    var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
    var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
    var lWordArray = new Array(lNumberOfWords - 1);
    var lBytePosition = 0;
    var lByteCount = 0;
    while (lByteCount < lMessageLength) {
      lWordCount = (lByteCount - (lByteCount % 4)) / 4;
      lBytePosition = (lByteCount % 4) * 8;
      lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount) << lBytePosition));
      lByteCount++;
    }
    lWordCount = (lByteCount - (lByteCount % 4)) / 4;
    lBytePosition = (lByteCount % 4) * 8;
    lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
    lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
    lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
    return lWordArray;
  };

  var wordToHex = function(lValue) {
    var wordToHexValue = '',
      wordToHexValue_temp = '',
      lByte, lCount;
    for (lCount = 0; lCount <= 3; lCount++) {
      lByte = (lValue >>> (lCount * 8)) & 255;
      wordToHexValue_temp = '0' + lByte.toString(16);
      wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2);
    }
    return wordToHexValue;
  };

  var x = [],
    k, AA, BB, CC, DD, a, b, c, d, S11 = 7,
    S12 = 12,
    S13 = 17,
    S14 = 22,
    S21 = 5,
    S22 = 9,
    S23 = 14,
    S24 = 20,
    S31 = 4,
    S32 = 11,
    S33 = 16,
    S34 = 23,
    S41 = 6,
    S42 = 10,
    S43 = 15,
    S44 = 21;

  //str = this.utf8_encode(str);
  x = convertToWordArray(str);
  a = 0x67452301;
  b = 0xEFCDAB89;
  c = 0x98BADCFE;
  d = 0x10325476;

  xl = x.length;
  for (k = 0; k < xl; k += 16) {
    AA = a;
    BB = b;
    CC = c;
    DD = d;
    a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
    d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
    c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
    b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
    a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
    d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
    c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
    b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
    a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
    d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
    c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
    b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
    a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
    d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
    c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
    b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
    a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
    d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
    c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
    b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
    a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
    d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453);
    c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
    b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
    a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
    d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
    c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
    b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
    a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
    d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
    c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
    b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
    a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
    d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
    c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
    b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
    a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
    d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
    c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
    b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
    a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
    d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
    c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
    b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
    a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
    d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
    c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
    b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
    a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244);
    d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
    c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
    b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
    a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
    d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
    c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
    b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
    a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
    d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
    c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314);
    b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
    a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
    d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
    c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
    b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
    a = addUnsigned(a, AA);
    b = addUnsigned(b, BB);
    c = addUnsigned(c, CC);
    d = addUnsigned(d, DD);
  }

  var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);

  return temp.toLowerCase();
}

jQuery(document).ready(function() {
  var container, index, list, record, section, url;
  var disqus_shortname = 'karasgollumtest';
  //list = $(".article-content > p," + ".article-content > h2," + ".article-content > h3," + ".article-content > h4," + ".article-content > h5," + ".article-content > h6," + ".article-content > ul," + ".article-content > ol," + ".article-content > blockquote," + ".article-content > dl," + ".article-content > pre," + ".article-content > div");
  list = $(".markdown-body > p," + ".markdown-body > h2," + ".markdown-body > h3," + ".markdown-body > h4," + ".markdown-body > h5," + ".markdown-body > h6," + ".markdown-body > ul," + ".markdown-body > ol," + ".markdown-body > blockquote," + ".markdown-body > dl," + ".markdown-body > pre," + ".markdown-body > div");
  url = window.location.href.replace(window.location.hash, '').replace(/\/index.html?$/i, '/');
  container = $("<aside id=\"inline-comments\"></aside>").appendTo($("#wiki-body"));
  section = 0;
  index = 0;
  record = {};
  list.each(function() {
    var $element, element;
    element = this;
    $element = $(element);
    console.log($element);
      return (function() {
        var $commentElement, commentElement, countElement, identifier;
        identifier = $element.prop("innerText").toLowerCase();
        identifier = md5(identifier);
        $element.attr("id", identifier);
        $commentElement = $('<div class="inline-comment"></div>');

        commentElement = $commentElement.get(0);
        $commentElement.data("identifier", identifier).css({
          top: element.offsetTop + "px",
          height: element.offsetHeight + "px"
        }).on("mouseenter", function() {
          if (Math.abs(element.offsetTop - commentElement.offsetTop) > 1) {
            $commentElement.css({
              top: element.offsetTop + "px"
            });
          }
          if (Math.abs(element.offsetHeight - commentElement.offsetHeight) > 1) {
            $commentElement.css({
              height: element.offsetHeight + "px"
            });
          }
        });
        $element.on("mouseenter", function() {
          $commentElement.addClass("hover");
          if (Math.abs(element.offsetTop - commentElement.offsetTop) > 1) {
            $commentElement.css({
              top: element.offsetTop + "px"
            });
          }
          if (Math.abs(element.offsetHeight - commentElement.offsetHeight) > 1) {
            $commentElement.css({
              height: element.offsetHeight + "px"
            });
          }
        }).on("mouseleave", function() {
          $commentElement.removeClass("hover");
        });
        countElement = $("<a rel=\"nofollow\" class=\"count\" href=\"" + identifier + "#disqus_thread\" data-disqus-identifier=\"" + url + "#" + identifier + "\"></a>").appendTo($commentElement.appendTo(container));
        console.log(countElement);
      })();
  });
  container.on("click", ".count", function(e) {
    var el, identifier, iframe, parent, title;
    e.preventDefault();
    e.stopPropagation();
    el = $(this);
    parent = el.closest(".inline-comment");
    if (!parent.hasClass("active")) {
      $(document.body).addClass("comment-open");
      container.children(".inline-comment.active").removeClass("active").children("iframe").fadeOut();
      parent.addClass("active");
      if (parent.children("iframe").length === 0) {
        identifier = "" + url + (parent.data("identifier"));
        title = document.title + (" - inline [" + (parent.data("identifier")) + "]");
        iframe = document.createElement('iframe');
        iframe.allowtransparency = true;
        iframe.src = "about:blank";
        parent.get(0).appendChild(iframe);
        iframe.contentWindow.document.open('text/html', 'replace');
        iframe.contentWindow.document.write("<!DOCTYPE html>\n<html>\n<head>\n  <link href=\"//" + window.location.host + "/assets/themes/pure/iframe/iframe.css\" rel=\"stylesheet\" media=\"screen\">\n</head>\n<body>\n  <div id=\"disqus_thread\">\n    <style type=\"text/css\">\n    .disqus-loader, .disqus-loader-wrap{background-image: url();}\n    .disqus-loader{width: 29px; height: 29px; margin: 11px 14px;  background-position: -54px 0px; background-repeat: no-repeat; animation:disqus-embed-spinner .7s infinite linear;-webkit-animation:disqus-embed-spinner .7s infinite linear}@keyframes disqus-embed-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@-webkit-keyframes disqus-embed-spinner{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}\n    .disqus-loader-wrap{width: 54px; height: 54px; margin: 0px auto; overflow: hidden; background-repeat: no-repeat;}\n    </style>\n    <div class=\"disqus-loader-wrap\">\n      <div class=\"disqus-loader\">\n      </div>\n    </div>\n  </div>\n  <script>\n  var disqus_developer = " + (window.disqus_developer || 0) + ";\n  var disqus_shortname = \"" + disqus_shortname + "\";\n  var disqus_title = \"" + title + "\";\n  var disqus_url = \"" + identifier + "\";\n  var disqus_identifier = \"" + identifier + "\";\n  (function() {\n      var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n      dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';\n      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n  })();\n  </script>\n  <script src=\"//" + window.location.host + "/assets/themes/pure/iframe/iframeResizer.contentWindow.js\"></script>\n</body>\n</html>");
        iframe.contentWindow.document.close();
        return $(iframe).fadeIn().iFrameResize({
          log: false,
          autoResize: true,
          contentWindowBodyMargin: 0,
          doHeight: true,
          doWidth: false,
          enablePublicMethods: false,
          interval: 100,
          scrolling: false
        });
      } else {
        return parent.children("iframe").fadeIn();
      }
    } else {
      $(document.body).removeClass("comment-open");
      parent.removeClass("active");
      return parent.children("iframe").fadeOut();
    }
  });
  return (function() {
    var s;
    s = document.createElement('script');
    s.async = true;
    s.type = 'text/javascript';
    s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
    return (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
  })();
});